% 这一部分针对getMockData进行测试

% 旋转载体多天线中频信号仿真（基于文档1.2.2节准确相位公式）
% 核心：仅使用中频信号（无基带下变频），验证旋转相位与功率特性

%% 1. 加载配置（信号+接收机，确保相干积分时间1ms）
IF_carrierFreq = signalConfig.signal.CenterFrequency; % 中频载波频率(Hz)
sim_totalDuration = signalConfig.sim.duration;   % 总仿真时长
sim_startTime = 0;      % 开始时间
M = signalConfig.antennas.count;                  % 天线数量

%% 3. 验证 motionModel 的输出结果(主要是卫星相对天线的俯仰角， 方位角的计算结果)并可视化，sim时间是 sim_totalDuration
resultCache = struct();
resultCache.phaseRotTotal = [];         % 旋转相位（rotationModel输出，文档1.2.2节公式）
resultCache.powerTotal = [];            % 旋转对接收信号载波功率的影响（文档1.2.2节公式）
resultCache.timeTotal = [];
for t =  sim_startTime : signalConfig.motion.motionUpdateTime : (sim_startTime + sim_totalDuration)
    rotationData = getMockRotData(t, signalConfig.rotation.freq, M);
    resultCache.timeTotal = [resultCache.timeTotal, t];
    resultCache.phaseRotTotal = [resultCache.phaseRotTotal, rotationData.phaseRot];
    resultCache.powerTotal = [resultCache.powerTotal, rotationData.powerRot];
end

figure;
subplot(3,2,1);
plot(resultCache.timeTotal, resultCache.phaseRotTotal(1, :));
title('旋转相位（rotationModel输出，文档1.2.2节公式）');
xlabel('时间（秒）');
ylabel('相位（弧度）');
subplot(3,2,2);
plotSingleSidedSpectrum(resultCache.phaseRotTotal(1, :), 1 / signalConfig.motion.motionUpdateTime);
title('旋转相位频谱（单频域）');
xlabel('频率（Hz）');
ylabel('幅度谱');
subplot(3,2,3);
plot(resultCache.timeTotal, resultCache.powerTotal(1, :));
title('旋转对接收信号载波功率的影响（文档1.2.2节公式）');
xlabel('时间（秒）');
ylabel('功率');
subplot(3,2,4);
plotSingleSidedSpectrum(resultCache.powerTotal(1, :), 1 / signalConfig.motion.motionUpdateTime);
title('旋转对接收信号载波功率的影响频谱（单频域）');
xlabel('频率（Hz）');
ylabel('幅度谱');
subplot(3,2,5);
plot(resultCache.timeTotal, sqrt(resultCache.powerTotal(1, :)));
title('旋转对接收信号载波功率的影响（文档1.2.2节公式）');
xlabel('时间（秒）');
ylabel('功率');
subplot(3,2,6);
plotSingleSidedSpectrum(sqrt(resultCache.powerTotal(1, :)), 1 / signalConfig.motion.motionUpdateTime);
title('旋转对接收信号载波功率的影响频谱（单频域）');
xlabel('频率（Hz）');
ylabel('幅度谱');


% getMaxBaseFreq(resultCache.powerTotal(1, :), 1 / signalConfig.motion.motionUpdateTime)